/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.vinisoft.gymwebapp.view;

import com.vinisoft.gymwebapp.model.entities.GymRol;
import com.vinisoft.gymwebapp.model.entities.GymUsuario;
import com.vinisoft.gymwebapp.model.facades.GymCompaniaFacade;
import com.vinisoft.gymwebapp.model.facades.GymRolFacade;
import com.vinisoft.gymwebapp.model.facades.GymUsuarioFacade;
import java.io.Serializable;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

/**
 *
 * @author vinikike
 */
@Named("usuarios")
@ViewScoped
public class UsuariosManagedBean extends AbstractJSFManagedBean implements Serializable {

    @Inject
    private SessionJSFManagedBean sessionBean;
//
    @EJB
    private GymCompaniaFacade companiaFacade;
    @EJB
    private GymUsuarioFacade usuarioFacade;
    @EJB
    private GymRolFacade rolFacade;
    //
    private List<GymUsuario> listaUsuarios;
    private List<GymRol> listaRoles;
    //
    private GymUsuario usuarioSeleccionado;
    //
    private String crear$id;
    private String crear$passw;
    private GymRol crear$rol;
    //
    private String editar$id;
    private String editar$passw;
    private GymRol editar$rol;

    @Override
    @PostConstruct
    protected void _init() {
        super._init();
        listaUsuarios = usuarioFacade.findAll();
        listaRoles = rolFacade.findAll();
    }

    public String crearUsuario$action() {
        try {
            GymUsuario nuevoUsuario = new GymUsuario();
            nuevoUsuario.setIdCompania(companiaFacade.find(1));
            nuevoUsuario.setId(crear$id);
            nuevoUsuario.setPassw(encriptarTexto(crear$passw));
            nuevoUsuario.setIdRol(crear$rol);
            usuarioFacade.create(nuevoUsuario);
            listaUsuarios = usuarioFacade.findAll();
            
            ocultarDialogo("crearUsuarioDialog");
            mostrarMensajeJSF(FacesMessage.SEVERITY_INFO, "Usuario creado correctamente");
        } catch (NoSuchAlgorithmException excpt) {
            mostrarMensajeJSF(FacesMessage.SEVERITY_ERROR, "No se pudo guardar el usuario");
            excpt.printStackTrace(System.err);
        }
        return null;
    }

    public String preEditarUsuario$action() {
        if (usuarioSeleccionado == null) {
            mostrarMensajeJSF(FacesMessage.SEVERITY_ERROR, "Seleccione el usuario");
            return null;
        }
        editar$id = usuarioSeleccionado.getId();
        editar$passw = usuarioSeleccionado.getPassw();
        editar$rol = usuarioSeleccionado.getIdRol();
        
        mostrarDialogo("editarUsuarioDialog");
        return null;
    }

    public String editarUsuario$action() {
        try {
            if (usuarioSeleccionado == null) {
                mostrarMensajeJSF(FacesMessage.SEVERITY_ERROR, "Seleccione el usuario");
                return null;
            }
            GymUsuario u = usuarioSeleccionado;
            u.setPassw(encriptarTexto(editar$passw));
            u.setIdRol(editar$rol);
            usuarioFacade.edit(u);
            listaUsuarios = usuarioFacade.findAll();
            usuarioSeleccionado = null;
            
            
            ocultarDialogo("editarUsuarioDialog");
            mostrarMensajeJSF(FacesMessage.SEVERITY_INFO, "Datos del usuario editados correctamente");
        } catch (NoSuchAlgorithmException excpt) {
            mostrarMensajeJSF(FacesMessage.SEVERITY_ERROR, "No se pudo guardar el usuario");
            excpt.printStackTrace(System.err);
        }
        return null;
    }

    private String encriptarTexto(String texto) throws NoSuchAlgorithmException {
        MessageDigest messageDigest = MessageDigest.getInstance("MD5"); // Inicializa MD5        
        byte[] resumen = messageDigest.digest(texto.getBytes()); // Genera el resumen MD5
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < resumen.length; i++) {
            s.append(Integer.toHexString((resumen[i] >> 4) & 0xf));
            s.append(Integer.toHexString(resumen[i] & 0xf));
        }
        return s.toString();
    }

    //============================================
    public List<GymUsuario> getListaUsuarios() {
        return listaUsuarios;
    }

    public void setListaUsuarios(List<GymUsuario> listaUsuarios) {
        this.listaUsuarios = listaUsuarios;
    }

    public List<GymRol> getListaRoles() {
        return listaRoles;
    }

    public void setListaRoles(List<GymRol> listaRoles) {
        this.listaRoles = listaRoles;
    }

    public GymUsuario getUsuarioSeleccionado() {
        return usuarioSeleccionado;
    }

    public void setUsuarioSeleccionado(GymUsuario usuarioSeleccionado) {
        this.usuarioSeleccionado = usuarioSeleccionado;
    }

    public String getCrear$id() {
        return crear$id;
    }

    public void setCrear$id(String crear$id) {
        this.crear$id = crear$id;
    }

    public String getCrear$passw() {
        return crear$passw;
    }

    public void setCrear$passw(String crear$passw) {
        this.crear$passw = crear$passw;
    }

    public GymRol getCrear$rol() {
        return crear$rol;
    }

    public void setCrear$rol(GymRol crear$rol) {
        this.crear$rol = crear$rol;
    }

    public String getEditar$id() {
        return editar$id;
    }

    public void setEditar$id(String editar$id) {
        this.editar$id = editar$id;
    }

    public String getEditar$passw() {
        return editar$passw;
    }

    public void setEditar$passw(String editar$passw) {
        this.editar$passw = editar$passw;
    }

    public GymRol getEditar$rol() {
        return editar$rol;
    }

    public void setEditar$rol(GymRol editar$rol) {
        this.editar$rol = editar$rol;
    }

}
